package com.mall.common.util;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 短信工具类
 * 基于腾讯云短信服务实现
 */
@Slf4j
@Component
public class SmsUtil {

    @Value("${sms.tencent.appId:0}")
    private int appId;

    @Value("${sms.tencent.appKey:}")
    private String appKey;

    @Value("${sms.tencent.templateId:0}")
    private int templateId;

    @Value("${sms.tencent.smsSign:}")
    private String smsSign;

    /**
     * 发送短信验证码
     *
     * @param phoneNumber 手机号码
     * @param params      短信参数
     * @return 发送结果
     */
    public boolean sendSms(String phoneNumber, String[] params) {
        try {
            SmsSingleSender ssender = new SmsSingleSender(appId, appKey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber,
                    templateId, params, smsSign, "", "");
            log.info("短信发送结果: {}", result);
            return result.result == 0; // 0表示发送成功
        } catch (HTTPException | IOException e) {
            log.error("发送短信失败, 手机号: {}", phoneNumber, e);
            return false;
        }
    }

    /**
     * 发送短信验证码（单个参数）
     *
     * @param phoneNumber 手机号码
     * @param param       短信参数
     * @return 发送结果
     */
    public boolean sendSms(String phoneNumber, String param) {
        return sendSms(phoneNumber, new String[]{param});
    }

    /**
     * 发送通用短信
     *
     * @param phoneNumber 手机号码
     * @param templateId  模板ID
     * @param params      短信参数
     * @param sign        短信签名
     * @return 发送结果
     */
    public boolean sendSms(String phoneNumber, int templateId, String[] params, String sign) {
        try {
            SmsSingleSender ssender = new SmsSingleSender(appId, appKey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber,
                    templateId, params, sign, "", "");
            log.info("短信发送结果: {}", result);
            return result.result == 0; // 0表示发送成功
        } catch (HTTPException | IOException e) {
            log.error("发送短信失败, 手机号: {}", phoneNumber, e);
            return false;
        }
    }
}